package com.mashibing.class38;

/**
 * 题目一
 * 小虎去买苹果，商店只提供两种类型的塑料袋，每种类型都有任意数量。
 * 1）能装下6个苹果的袋子
 * 2）能装下8个苹果的袋子
 * 小虎可以自由使用两种袋子来装苹果，但是小虎有强迫症，他要求自己使用的袋子数量必须最少，且使用的每个袋子必须装满。
 * 给定一个正整数N，返回至少使用多少袋子。如果N无法让使用的每个袋子必须装满，返回-1
 */
public class Code01_AppleMinBags {

	/**
	 * @param apple  苹果数量.
	 * @return
	 */
	public static int minBags(int apple) {
		if (apple < 0) {
			return -1;
		}
		int bag8 = (apple >> 3); // 8号袋 的数量
		int rest = apple - (bag8 << 3); // 剩余的苹果树 (用8个袋子装完之后的剩余苹果数)
		while(bag8 >= 0) {
			// rest 个
			if(rest % 6 ==0) { // 能够被6号袋搞定
				return bag8 + (rest / 6);
			} else { // 不能被 6号袋搞定.
				bag8--; // 8号袋子的数量减一
				rest += 8; // 剩余苹果的数量 加 8
			}
		}
		return -1;
	}

	public static int minBagAwesome(int apple) {
		if ((apple & 1) != 0) { // 如果是奇数，返回-1
			return -1;
		}
		if (apple < 18) {
			return apple == 0 ? 0 : (apple == 6 || apple == 8) ? 1
					: (apple == 12 || apple == 14 || apple == 16) ? 2 : -1;
		}
		return (apple - 18) / 8 + 3;
	}

	public static void main(String[] args) {
		for(int apple = 1; apple < 200;apple++) {
			System.out.println(apple + " : "+ minBags(apple));
		}
	}
}
